﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Web.UI;
using System.Web.UI.WebControls;
using ClickLand.CorporacionPlaza.Presentacion.Contratos.AdministracionContrato;
using ClickLand.CorporacionPlaza.Presentacion.CorporacionPlazaWS;
using ClickLand.CorporacionPlaza.Presentacion.Presentadores.AdministracionContrato;

namespace AdministracionContrato
{
    /// <summary> Codebehind de la vista que genera las facturas </summary>
    public partial class GenerarFactura : Page, IGenerarFactura
    {

        #region Atributos

        /// <summary> Objeto que posee la definicion del presentador de la vista </summary>
        private PresentadorGenerarFactura _presentador;

        #endregion

        #region Eventos


        /// <summary>Evento de inicializacion de la página.</summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void Page_Init(object sender, EventArgs e)
        {
            _presentador = new PresentadorGenerarFactura(this);
        }


        /// <summary>Evento de inicializacion de la página.</summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                FacturaMantenimiento = Request.QueryString["tipo"].Equals("1");
                _presentador.CargarPagina();
                rdoMensual.Checked = true;
                lblFechas.Visible = true;
                fechaMes.Visible = true;
                fechas.Visible = false;
                btnImprimi.Visible = !FacturaMantenimiento;
                btnImprimir.Visible = FacturaMantenimiento;
            }
            else if (FacturaMantenimiento != Request.QueryString["tipo"].Equals("1"))
            {
                FacturaMantenimiento = Request.QueryString["tipo"].Equals("1");
                _presentador.CargarPagina();
            }
            mvConsultarVenta.SetActiveView(vConsultarVenta);
        }

        
        /// <summary> Metodo que se ejecuta cuando se da click al boton de buscar ventas </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnGenerarPdfMantClick(object sender, EventArgs e)
        {
            bool validar = true;
            if (rdoMensual.Checked)
            {
                Page.Validate("ValidarConsulta");
                validar = Page.IsValid;
            }

            if (!validar) return;
            _presentador.ImprimirMantenimiento();
            myPDF.Attributes["src"] = ConfigurationManager.AppSettings["RutaDescargaOnLine"] + "Facturas.pdf";
            mvConsultarVenta.SetActiveView(vReporte);
        }

            
        /// <summary> Metodo que se ejecuta cuando se da click al boton de buscar ventas </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnImprimirCLick(object sender, EventArgs e)
        {
            _presentador.Imprimir();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.ContentType = "application/pdf";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + "Facturas.pdf");
            Response.TransmitFile(ConfigurationManager.AppSettings["RutaDescarga"] + "Facturas.pdf");
            Response.End();
            Response.Flush();
            Response.Clear();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton regresar en la vista de la lista deventas </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnRegresarListaCLick(object sender, EventArgs e)
        {
            mvConsultarVenta.SetActiveView(vConsultarVenta);
        }
        

        /// <summary> Metodo que se ejecuta cuando se selecciona el tipo de consulta mensual </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void RdoMensularChecked(object sender, EventArgs e)
        {
            lblFechas.Visible = true;
            fechaMes.Visible = true;
            fechas.Visible = false;
        }


        /// <summary> Metodo que se ejecuta cuando se selecciona el tipo de consulta personalizado </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void RdoPersonalizado(object sender, EventArgs e)
        {
            lblFechas.Visible = false;
            fechas.Visible = true;
            fechaMes.Visible = false;
        }

        
        /// <summary> Metodo que se ejecuta cuando se da click al boton de generar PDF </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnGenerarPdfClick(object sender, EventArgs e)
        {
            bool validar = true;
            if (rdoMensual.Checked)
            {
                Page.Validate("ValidarConsulta");
                validar = Page.IsValid;
            }

            if (!validar) return;
            _presentador.Imprimir();
            myPDF.Attributes["src"] = ConfigurationManager.AppSettings["RutaDescargaOnLine"] + "Facturas.pdf";
            mvConsultarVenta.SetActiveView(vReporte);
        }


        /// <summary> Metodo que ejecuta la acccion del boton regresar de la vista de visualizacion de reporte </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnRegresarReporte(object sender, EventArgs e)
        {
            mvConsultarVenta.SetActiveView(vConsultarVenta);
        }
        #endregion

        #region Propiedades

        /// <summary> Propiedad que obtiene la fecha de inicio de la consulta </summary>
        public DateTime FechaInicio
        {
            get { return rdoMensual.Checked ? Convert.ToDateTime(fechaMes.Fecha) : fechas.FechaDesde; }
        }


        /// <summary> Propiedad que obtiene la fecha fin de la consulta </summary>
        public DateTime FechaFin
        {
            get { return rdoMensual.Checked ? fechaMes.FechaFin : fechas.FechaHasta; }
        }


        /// <summary> Propiedad que setea la lista de contratos activos pertenecientes a la feria</summary>
        public List<ContratoDto> ListaContratos
        {
            get { return (List<ContratoDto>)Session["ListaContratos"]; }
            set
            {
                ddlContratos.Items.Clear();
                ddlContratos.Items.Add(new ListItem("-Todos-", "-1"));
                Session["ListaContratos"] = value;
                ddlContratos.DataSource = value;
                ddlContratos.DataTextField = "RazonSocial";
                ddlContratos.DataValueField = "Id";
                ddlContratos.DataBind();
            }
        }

        /// <summary> Propiedad que obtiene el contrato seleccionado </summary>
        public ContratoDto ContratoSeleccionado
        {
            get
            {
                var lista = (List<ContratoDto>)Session["ListaContratos"];
                return (ddlContratos.SelectedIndex == 0) ? null : lista[ddlContratos.SelectedIndex - 1];
            }
        }


        /// <summary>  Indica si la factura a generar es de mantenimiento  </summary>
        public bool FacturaMantenimiento
        {
            get { return (bool) Session["FacturaMantenimiento"]; }            
            set { Session["FacturaMantenimiento"] = value; }
        }


        #endregion

        /// <summary> Validador que valida la fecha ingresada por el usuairo </summary>
        /// <param name="source">objeto fuente del validador</param>
        /// <param name="args">argumento del evento</param>
        protected void ValidarFecha(object source, ServerValidateEventArgs args)
        {
            if (!string.IsNullOrEmpty(fechaMes.Fecha))
            {
                DateTime fechaInicio = new DateTime(FechaFin.Year, FechaFin.Month, 1);
                DateTime fechaHoy = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
                args.IsValid = fechaInicio <= fechaHoy;
            }
            else
                args.IsValid = false;
        }
    }
}